
from flask_sqlalchemy import SQLAlchemy

#app
from . import app
# DB 必须用app进行db初始化
db = SQLAlchemy(app)

# TODO: SQLAlchemy 如何使用已经存在的db文件未解决.

# 初始化数据库：创建或连接db
def init_db():
    if app is None or db is None:
        return False
    # 使用 SQLAlchemy 提供的方法来创建数据库和表
    with app.app_context():
        db.create_all() # 创建所有在当前上下文中定义的模型对应的表

    return True

# 模型是数据库表的 Python 类，每个模型类代表数据库中的一张表，每个类实例代表一条记录。
# 所有模型类需要继承自 db.Model
class Blog(db.Model):

    # 定义表结构
    # db.Column定义模型的字段，指定字段的类型、是否为主键、是否唯一、是否可以为空等属性。
    id = db.Column('id', db.Integer, primary_key = True) # 整数主键会自动增加
    title = db.Column('title',db.String(50), unique=True, nullable=False)
    content = db.Column('content',db.String(200), nullable=False)

    def __init__(self, title, content) -> None:
        self.title = title
        self.content = content

    def __repr__(self) -> str:
        return '<Blog %r>' % self.title

    @staticmethod
    def add(titel, content):
        blog = Blog(titel, content)
        db.session.add(blog)
        db.session.commit()

    @staticmethod
    def get_all():
        users = Blog.query.all()
        return users
    
    @staticmethod
    def update(id, titel, content):
        blog = Blog.query.get(id)
        if blog and titel and content:
            blog.titel = titel
            blog.content = content
            db.session.commit()

    @staticmethod
    def remove(id):
        blog = Blog.query.get(id)
        if blog:
            db.session.delete(blog)
            db.session.commit()
